ในการเร่งความเร็วผ่าน GPU เราต้องละทิ้งแนวคิด 'คำนวณก่อน' อย่างเด็ดขาด ประสิทธิภาพสมัยใหม่ถูกกำหนดโดย การจัดการหน่วยความจำ: การประสานงานการจัดสรรข้อมูล การซิงโครไนซ์ และการปรับปรุงประสิทธิภาพระหว่างอุปกรณ์หลัก (CPU) และอุปกรณ์ปลายทาง (GPU)
1. ความแตกต่างระหว่างหน่วยความจำและหน่วยประมวลผล
แม้ว่าความสามารถในการประมวลผลทางคณิตศาสตร์ของ GPU ($TFLOPS$) จะพุ่งสูงขึ้นอย่างรวดเร็ว แต่แบนด์วิดธ์หน่วยความจำ ($GB/s$) กลับเติบโตในอัตราที่ช้ากว่ามาก ทำให้เกิดช่องว่างที่หน่วยประมวลผลมักจะ 'ขาดแคลน' ต้องรอข้อมูลจากหน่วยความจำกราฟิก (VRAM) ดังนั้น การเขียนโปรแกรมบน GPU มักจะเป็นการเขียนโปรแกรมที่เน้นหน่วยความจำ។
2. โมเดลโรฟไลน์
โมเดลนี้แสดงความสัมพันธ์ระหว่าง ความเข้มข้นของการคำนวณ (FLOPs/Byte) กับประสิทธิภาพ แอปพลิเคชันส่วนใหญ่มักจะแบ่งออกเป็นสองประเภท:
- จำกัดด้วยแบนด์วิดธ์ (เส้นเอียงชันสูง): ถูกจำกัดด้วยแบนด์วิดธ์ (เส้นเอียงชันสูง)
- จำกัดด้วยค่าสูงสุดของ TFLOPS (ระนาบแนวนอน): ถูกจำกัดด้วยค่าสูงสุดของ TFLOPS (ระนาบแนวนอน)
3. ภาษีจากการเคลื่อนย้ายข้อมูล
จุดที่ทำให้ประสิทธิภาพลดลงส่วนใหญ่ไม่ใช่การคำนวณ แต่เป็นเวลาหน่วง (latency) และต้นทุนพลังงานในการส่งข้อมูล 1 ไบต์ผ่านบัส PCIe หรือจากหน่วยความจำ HBM โค้ดที่มีประสิทธิภาพสูงจะให้ความสำคัญกับการคงอยู่ของข้อมูล และลดการส่งข้อมูลระหว่างโฮสต์กับอุปกรณ์ให้น้อยที่สุด